一、ESP32-S3引脚分布图(电路图)


暂时无法在飞书文档外展示此内容
二、嵌入式开发与 Python 开发流程的本质区别
💡
三、ESP-IDF 编译工具链使用基本流程是怎么样的?
ESP-IDF大致流程是:
IDE → 编辑代码 → 点击编译 → 构建系统 → 链接器 → 生成 .bin → 烧录到 单片机Flash → 芯片复位 → CPU读取指令并操作寄存器
这就是典型的 裸机/RTOS 嵌入式开发流程。
🔍 更精确的步骤:
- C 源代码 (.c)
- 预处理(.C)↓
- 预处理(Preprocessing) #include, #define 展开、宏替换 → 生成 .i 文件
- 编译器(compiler)把 C → 汇编(.s)
- C 代码(.i) → 汇编(.s)
- 汇编器(assembler)把 汇编 (.s)→ 机器码(.o) 汇编(.s)→ 目标文件(.o)
- 链接(linker)只负责合并 .o 文件,构建系统(CMake/Ninja)负责调度编译和链接,不产生汇编或机器码 所有 .o + 库(如 libc、driver)→ 可执行 ELF 文件(.elf)
- 生成固件(Post-build)后处理工具(esptool / objcopy)把 .elf → .bin
- objcopy:从 .elf 提取 .bin(去掉调试符号)
- 合并 bootloader + partition table + app → 最终烧录镜像
- 烧录(Flashing) 通过串口(UART)或 JTAG,将 .bin 写入 Flash 的指定偏移地址(如 App 在 0x10000)
- 复位(Resetting):
- 芯片重启,CPU 的程序计数器(PC)指向 ROM 中的固化引导程序
- 启动(Boot)
- 第一阶段:芯片上电 → ROM bootloader(只读,不可修改)
- 第二阶段:加载二级 bootloader(位于 Flash 0x1000)
- 第三阶段:bootloader 读取分区表 → 跳转到 App 入口(通常 0x10000)
- 运行:CPU 从 App 入口地址逐条取指执行,初始化 RAM、外设、调用 app_main()。App 初始化 → 调用 app_main() → 进入 FreeRTOS 调度
💡 关键点:程序不是“运行在操作系统上”,而是直接控制硬件,CPU 的 PC 寄存器被设置为入口地址,开始取指执行。没有“进程”、“文件系统”(除非你挂载 SPIFFS/FATFS)、“动态库”等概念。
